package Filters;
import java.util.Collections;
import java.util.Iterator;
import java.util.regex.*;

import FilesManagers.CantOpenFileException;


public class Stemming extends WordsFilter {
	private char indicadorStemming;
	private String marcaCorte;
	
	public Stemming(String biblioteca) throws CantOpenFileException {
		this(biblioteca,'=',',','>');
	}

	public Stemming(String biblioteca, char marcadorComentario,
			char separadorPalabras,char indicadorStemming) throws CantOpenFileException {
			super(biblioteca, marcadorComentario, separadorPalabras);
			this.setIndicadorStemming(indicadorStemming);
			this.marcaCorte= ""+indicadorStemming;
		
		
	}
	
	/*Por cada palabra que leo me fijo cual es la terminacion mas larga que encaja para recortarsela.*/
	protected String filterWords(String lineaOrigen){
		
		lineaOrigen = " "+lineaOrigen+" ";
		Iterator<String> palabrasIt = null;//this.getListaPalabras().iterator();
		StringBuffer resultado = new StringBuffer("");
		String palabraTemp="";
		String[] palabras = lineaOrigen.trim().split(" ");
		
		//String resultado="";
		for(int i=0; i< palabras.length; i++){
			//String reemplazoMasLargo=null;
			palabrasIt = this.getListaPalabras().iterator();
			
			if(!isNumber(palabras[i]) && !palabras[i].equals(" ") && !palabras[i].equals("")){				
				//String raizPalabra=null;
				String palabraActual = palabras[i].trim();
				//System.out.println("A la palabra: "+palabraActual);
				while(palabrasIt.hasNext()){
					String terminacion = palabrasIt.next();
					
					//System.out.println("Voy a probar de cortar: "+terminacion);
					//Pattern patron = Pattern.compile("^([a-zA-Z]+)"+terminacion+"$");
					//Matcher encaja = patron.matcher(palabras[i].trim());
					//palabraActual=palabraActual.replaceAll(terminacion+"$", marcaCorte);
					palabraTemp=palabraActual.replaceAll(terminacion+"$", marcaCorte);
//					Si despues de cortar mide mas de 4 (3 mas in 1 de indicador de corte) entonces ejecuto corte
					if(palabraTemp.length()>=4)    palabraActual=palabraTemp;
					
					if(palabraActual.charAt(palabraActual.length()-1)==indicadorStemming){
						//System.out.println("Le corte: "+terminacion);
						break;
					}
					//if(encaja.find()){
						//if((reemplazoMasLargo==null)||(terminacion.length()>reemplazoMasLargo.length())){
							//reemplazoMasLargo=terminacion;
							//raizPalabra = encaja.group(1);
							//break;
						//}						
					//}					
				}
				//if(raizPalabra!=null){
					//palabras[i] = raizPalabra+""+indicadorStemming;
				//}
				resultado.append(" ").append(palabraActual);// = resultado+" "+ palabraActual;
			}
			
		}
		
		return resultado.toString().trim();
	}
	public char getIndicadorStemming() {
		return indicadorStemming;
	}

	private void setIndicadorStemming(char indicadorStemming) {
		this.indicadorStemming = indicadorStemming;
	}
	@Override
	protected void ordenarPalabras() {
		// TODO Apéndice de método generado automáticamente
		Collections.sort(listaPalabras,  new WordsComparator());
		
	}

}
